/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/**
 *
 * @author Nicolas
 */
public class Process {

    //Numéro du process
    private int idProcess;

    private HorlogeLamport horloge;

    private Pere pere;

    private Tampon tamponDeTrace;
    private Client client;

    private Tampon tamponDeReception;
    private Recepteur recepteur;

    //Numéro du port utilisé pour la socket du recepteur
    private int numPortRecepeteur;
    private int numPortEmmeteur;
    //Numéro du port utilisé pour le serveur SVG
    private int numPortServeurSVG = 8080;

    private Tampon tamponDEmission;
    private Emetteur emetteur;

    /**
     * Constructeur
     */
    public Process(int _numProcess, int _numPortRecepteur, int _numPortEmetteur)
    {
        this.idProcess = _numProcess;
        this.numPortRecepeteur = _numPortRecepteur;
        this.numPortEmmeteur = _numPortEmetteur;

        //Création de l'horloge
        horloge = new HorlogeLamport(this);

        tamponDEmission = new Tampon(this);
        tamponDeReception = new Tampon(this);
        tamponDeTrace = new Tampon(this);
    }

    public void lanceReception()
    {
        //Création du tampon de reception et du recepteur
        System.out.println("-- Création du recepteur du process : "+this.idProcess);
        recepteur = new Recepteur(this, numPortRecepeteur);
        recepteur.start();
    }

    public void lanceEmission()
    {
        //Création du tampon d'émission et de l'émetteur
        System.out.println("-- Création de l'emetteur du process : "+this.idProcess);
        emetteur = new Emetteur(this, numPortEmmeteur);
        emetteur.start();
    }

    public void lanceClient()
    {
        System.out.println("-- Création du client du process : "+this.idProcess);
        client = new Client(this, numPortServeurSVG);
        client.start();
    }

    public void lancePere()
    {
        //Création du thread père
        System.out.println("-- Création du père du process : "+this.idProcess);
        pere = new Pere(this);
        pere.start();
    }

    /**
     * Getter pour tous les élements
     */

   public int getNumProcess()
   {
       return this.idProcess;
   }

   public HorlogeLamport getHorloge()
   {
       return this.horloge;
   }

   public Pere getPere()
   {
       return this.pere;
   }

   public Tampon getTamponDeTrace()
   {
       return this.tamponDeTrace;
   }

   public Client getClient()
   {
       return this.client;
   }

   public Tampon getTamponDeReception()
   {
       return this.tamponDeReception;
   }

   public Recepteur getRecepteur()
   {
       return this.recepteur;
   }

   public Tampon getTamponDEmission()
   {
       return this.tamponDEmission;
   }

   public Emetteur getEmetteur()
   {
       return this.emetteur;
   }
}
